
/**
 * 解析url参数
 * @example?id=123232&a=b
 * @return Object {id:12323, a:b}
 **/
export function urlParse () {
    let url = window.location.search;
    let obj = {};
    let reg = /[?&][^?&]+=[^?&]+/g;
    let arr = url.match(reg);
    // ['?id=123232', '&a=b']
    if (arr) {
        arr.forEach((item) => {
            let tempArr = item.substring(1).split('=');
            let key = decodeURIComponent(tempArr[0]);
            let val = decodeURIComponent(tempArr[1]);
            obj[key] = val;
        });
    }
    return obj;
};
export function getShortId(type) {
    let url = window.location.href.toLocaleLowerCase();
    return url.split(type + '/')[1].split('#/')[0];
}
/**
 * 打散数组
 * @example 接收一个数组 let randomlist = shuffle(Arr);
 * @return Array 将接收的数组 重新随机排序生成一个新数组
 **/
export function shuffle (arr) {
    let _arr = arr.slice();
    for (let i = 0; i < _arr.length; i++) {
        let j = getRandomInt(0, i);
        let t = _arr[i];
        _arr[i] = _arr[j];
        _arr[j] = t;
    }
    return _arr;
}
// 随机取两个整数中间的数，包括最大数。
function getRandomInt (min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

/** 抖动消除函数封装 截流执行, 例子：
 *   绑定监听query，截流执行，延迟200ms派发事件
 *   this.$watch('query', debounce((newQuery) => {
 *       this.$emit('query', newQuery);
 *   }, 200));
 **/
export function debounce (func, delay) {
    let timer;
    return function (...args) {
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(() => {
            func.apply(this, args);
        }, delay);
    };
}

// 插入数据
// arr: 存储的数组
// val: 存储的值
// compare: 比较函数 （当前）
// maxLen: 最大值
export function insertArray(arr, val, compare, maxLen) {
    // findIndex是es6数组的api,查找当前数组中是不是有某个元素
    // 接收一个比较函数
    const index = arr.findIndex(compare);
    // 若数组中有这条数据，并且是第一个，则直接返回，什么都不做
    if (index === 0) { return; }
    // 若数组中有这条数据，并且不是第一个数据
    if (index > 0) {
        // 删除这条己存在的数据
        arr.splice(index, 1);
    }
    // 将数据插到数组的第一个位置
    arr.unshift(val);
    // 判断数组长度,删除最后一条数据
    if (maxLen && arr.length > maxLen) {
        arr.pop();
    }
}

// 从数组中删除指定元素
export function delFromArr(arr, compare) {
    const index = arr.findIndex(compare);
    if (index > -1) {
        arr.splice(index, 1);
    }
}

// 从数组中找到指定id的元素
export function getById(arr, id) {
    const index = arr.findIndex((item) => {
        return item.id === id;
    });
    return index > -1 ? arr[index] : false;
}

// 分隔数组
export function sliceArr(array, size) {
    var result = [];
    for (var x = 0; x < Math.ceil(array.length / size); x++) {
        var start = x * size;
        var end = start + size;
        result.push(array.slice(start, end));
    }
    return result;
}

// 判断是否是一个对象
export function isObject (obj) {
    return obj !== null && typeof obj === 'object';
}

// 判断值是否存在
export function isDef (v) {
    return v !== undefined && v !== null;
}

// 实现深拷贝
export function deepCopy (target) {
    if (typeof target !== 'object' || target == null) { return }
    let newObj = target instanceof Array ? [] : {}
    for (let item in target) {
        if (target.hasOwnProperty(item)) {
            newObj[item] = typeof target[item] === 'object' ? deepCopy(target[item]) : target[item]
        }
    }
    return newObj
}
// 判断是否存在数组中
export function inArray (arr, val) {
    let testStr = ',' + arr.join(',') + ',';
    return testStr.indexOf(',' + val + ',') !== -1;
}

// 数字加逗号
export function addCommas (nStr) {
    nStr += ''
    let x = nStr.split('.')
    let x1 = x[0]
    let x2 = x.length > 1 ? '.' + x[1] : ''
    var rgx = /(\d+)(\d{3})/
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2')
    }
    return x1 + x2
}

// 动态设置浏览器 title
export const setTitle = function(title) {
    title = title ? `${title}` : '同策网'
    window.document.title = title
}
